#!/usr/bin/env bash

# ----------------------------------------------------------------------
# Filename	:  14-passwd-lv4.sh
# Version	:  1.0
# Date		:  2020/05/22
# Author	:  Lz
# Email		:  lz843723683@gmail.com
# History	:     
#             Version 1.0, 2020/05/22
# Function	： 测试安全四级-强密码复杂度
# Out		:        
#              0 => TPASS
#              1 => TFAIL
#              other=> TCONF
# ----------------------------------------------------------------------

## TODO : 测试收尾清除工作
#
PasswdClean_FTLV4(){
	userdel -rf $User_Lv4 &>/dev/null

	return $TPASS
}


## TODO: 调用程序退出函数
#    In: $1 => 调用脚本结果值
PasswdExit_FTLV4(){
        # 调用退出函数，其中调用了clean相关函数
	Exit_FTLIB ${1}
}


## TODO: 用户界面
#
PasswdUSAGE_FTLV4(){
	USAGE_FTLIB "安全四级测试 - 强密码复杂度"
}


## TODO : 测试前的初始化 
#  Out  : 
#         0 => TPASS
#         1 => TFAIL
#         other=> TCONF
PasswdInit_FTLV4(){
        # 调用初始化函数
	Init_FTLIB "PasswdClean_FTLV4"
        # 调用用户界面函数
 	PasswdUSAGE_FTLV4

	# 用户名
	User_Lv4="testltf-lv4"
}


## TODO ：失败集合。身份鉴别失败处理，密码复杂度必须达到8位以上，20位以下，必须包含三种字符组合，包括：数字、字母、特殊符号，密码中不能包含用户名，不能包含键盘3个连续以上的字符
#
PasswdTest01_FTLV4(){
	# 失败的密码集合
	local failpwarr="qwe.2020 123.kylin ewq.2020 321.kylin kylin....202007171717"
	# 失败密码
	local failpw=""
	# 成功密码
	local passpw=""
	local ret="$TPASS"	

	# 临时用户
	local tmpuser="$User_Lv4"

	# 如果存在用户则删除	
	userdel -rf $tmpuser &>/dev/null
	useradd $tmpuser  &>/dev/null

	# 判断失败密码
	local tmppw=""
	for tmppw in ${failpwarr[@]}
	do
		echo $tmppw | passwd --stdin $tmpuser &>/dev/null
		if [ $? -eq 0 ];then
		# 密码设置成功
			passpw="$passpw $tmppw"
			ret=${TFAIL}
		else
		# 密码设置失败
			failpw="$failpw $tmppw"
		fi
	done
	userdel -rf passtest &>/dev/null

	echo "设置成功的密码: $passpw"
	echo "设置失败的密码: $failpw"

        OutputRet_FTLIB ${ret}
        RetParse_FTLIB "要求以下密码设置失败 ${failpwarr[@]}" "False"
}


## TODO ：成功集合。身份鉴别失败处理，密码复杂度必须达到8位以上，必须包含三种字符组合，包括：数字、字母、特殊符号，密码中不能包含用户名，不能包含键盘3个连续以上的字符
#
PasswdTest02_FTLV4(){
	# 成功的密码集合
	local passpwarr="kylin.2020 dzzf.147 K!y@l3I\$N D&z%Z3F@ kylin....20200717171"
	# 失败密码
	local failpw=""
	# 成功密码
	local passpw=""
	local ret="$TPASS"	

	# 临时用户
	local tmpuser="testltf-lv4"

	# 如果存在用户则删除	
	userdel -rf $tmpuser &>/dev/null
	useradd $tmpuser  &>/dev/null

	# 判断失败密码
	local tmppw=""
	for tmppw in ${passpwarr[@]}
	do
		echo $tmppw | passwd --stdin $tmpuser &>/dev/null
		if [ $? -eq 0 ];then
		# 密码设置成功
			passpw="$passpw $tmppw"
		else
		# 密码设置失败
			failpw="$failpw $tmppw"
			ret=${TFAIL}
		fi
	done
	userdel -rf passtest &>/dev/null

	echo "设置成功的密码: $passpw"
	echo "设置失败的密码: $failpw"

        OutputRet_FTLIB ${ret}
        RetParse_FTLIB "要求以下密码设置成功 ${passpwarr[@]}" "False"
}


## TODO : Main
#  Out  : 
#         0 => TPASS
#         1 => TFAIL
#         other => TCONF
PasswdMain_FTLV4(){
	PasswdInit_FTLV4

	PasswdTest01_FTLV4

	PasswdTest02_FTLV4

	return ${TPASS}	
}

PasswdMain_FTLV4
PasswdExit_FTLV4 $?
